#include <iostream>
using namespace std;

// Definition for singly-linked list.
struct ListNode {
    int val;
    ListNode *next;
    ListNode() : val(0), next(nullptr) {}
    ListNode(int x) : val(x), next(nullptr) {}
    ListNode(int x, ListNode *next) : val(x), next(next) {}
};

class Solution {
public:
    ListNode* reverseKGroup(ListNode* head, int k) {
        ListNode* h = new ListNode(-1);
        // 给链表添加一个头节点
        h->next = head; 
        int n = 0;
        ListNode* pre = h;
        // 尾节点
        ListNode* tail = pre->next;
        while (tail != nullptr)
        {
            // 找到一个反转组
            if (++n % k == 0)
            {
                // p指向该反转组的首节点
                ListNode* p = pre->next;
                // 将k-1个节点插入到pre节点之后
                for (int i = 1; i < k; i++)
                {
                    ListNode* q = p->next;
                    p->next = p->next->next;
                    // 将节点q插入到pre节点之后
                q->next = pre->next;
                pre->next = q;
                }
                // 当前组处理完了，准备去处理下一个组
                pre = p;
                tail = pre->next;
                
            }else{
                tail = tail->next;
            }
            
        }
        return h->next;
    }
};

int main()
{

    return 0;
}